/*
 * Copyright (C), 2002-2016, 苏宁易购电子商务有限公司
 * FileName: NumberUtils.java
 * Author:   15050536
 * Date:     2016年12月6日 下午8:53:10
 * Description: //模块目的、功能描述      
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.suning.sawp.service.util;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;

import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.Years;
import org.joda.time.format.DateTimeFormat;

import com.suning.sawp.constants.TMConstants;


/**
 * 数据计算的一些常用方法
 *
 * @author 15050536 石键平
 */
public class NumberUtils {
	
	private NumberUtils(){
		
	}
	
	public static final String empty = "--";
	
	
	/**
	 * 四舍五入 保留2位小数
	 */
	public static String left4Add5(Number number){
		NumberFormat nt = NumberFormat.getInstance();
		// 设置百分数精确度2即保留两位小数
		nt.setMinimumFractionDigits(2);
		return nt.format(number);
	}
	
	/**
	 * 计算百分比
	 *
	 * @param a 分子
	 * @param b 分母
	 * @return
	 */
	public static String calculatePercent(Number a, Number b) {
		if (a == null || b == null || b.equals(0)) {
			return empty;
		}
		NumberFormat nt = NumberFormat.getPercentInstance();
		// 设置百分数精确度2即保留两位小数
		nt.setMinimumFractionDigits(2);
		// 计算，然后转换成百分比
		double an = a.doubleValue()/b.doubleValue();
		return nt.format(an);
	}
	
	/**
	 * 
	 * 两个数相除之后，得到的字符串结果，4舍5入，保留2位小数
	 *
	 * @param a 分子
	 * @param b 分母
	 * @return
	 */
	public static String divide(Number a,Number b){
		if (a == null || b == null || b.equals(0)) {
			return StringUtils.EMPTY;
		}
		BigDecimal fz = new BigDecimal(a.doubleValue());
		BigDecimal fm = new BigDecimal(b.doubleValue());
		return fz.divide(fm,2, RoundingMode.HALF_UP).toPlainString();
	}
	
	
	/**
	 * 根据dayOfWeek获取对应的星期
	 */
	public static String getWeek(int dayOfWeek){
		if(dayOfWeek < 1 || dayOfWeek > 7){
			return "未知";
		}
		String[] weekArray = new String[]{"周一","周二","周三","周四","周五","周六","周日"};
		return weekArray[dayOfWeek-1];
	}
	
	/**
	 * 
	 * 根据入司时间和销售金额判断到底是 0:"蓝瘦香菇"还是1:"洪荒之力"
	 *
	 * @param amount 销售总金额
	 * @param hireTime 入司时间
	 * @return
	 */
	public static int getSaleState(double amount,String hireTime){
		DateTime hireDt = DateTime.parse(hireTime, DateTimeFormat.forPattern("yyyy-MM-dd"));
		DateTime now = new DateTime();
		int years = Years.yearsBetween(hireDt, now).getYears();
		//入司满1年 
		if(years > 0 ){
			//销售大于5w
			if(amount >= TMConstants.FIFTY_THOUSAND){
				return TMConstants.SALE_STATE_HHZL;
			}else{
				return TMConstants.SALE_STATE_LSXG;
			}
		}else{//入司不满1年 
			//销售大于1w
			if(amount >= TMConstants.TEN_THOUSAND){
				return TMConstants.SALE_STATE_HHZL;
			}else{
				return TMConstants.SALE_STATE_LSXG;
			}
		}
	}
	
	/**
	 * 科学计数法转换成string
	 *
	 * @param d
	 * @return
	 */
	public static String changeENotation(double d) {
		NumberFormat nt = NumberFormat.getInstance();
		nt.setGroupingUsed(false);
		return nt.format(d);
	}
}
